package com.zenithmind.chat.service;

import com.zenithmind.chat.pojo.entity.AiChat;
import com.zenithmind.chat.pojo.entity.AiChatMessage;

import java.util.List;

/**
 * AI服务接口，用于与不同的AI模型交互
 * 重构后遵循接口隔离原则，将不同职责分离到不同接口中
 */
public interface AiService extends AiModelChatService, AiModelStreamService, TokenCalculationService {
}

/**
 * AI模型聊天服务接口 - 负责基本的聊天功能
 * 遵循接口隔离原则，只包含聊天相关的核心方法
 */
interface AiModelChatService {

    /**
     * 发送聊天消息并获取AI响应
     *
     * @param chat 对话信息
     * @param messages 历史消息
     * @param content 当前用户消息内容
     * @return AI响应消息
     */
    AiChatMessage chat(AiChat chat, List<AiChatMessage> messages, String content);
}

/**
 * AI模型流式聊天服务接口 - 负责流式聊天功能
 * 遵循接口隔离原则，将流式功能分离
 */
interface AiModelStreamService {

    /**
     * 发送聊天消息并以流式获取AI响应
     *
     * @param chat 对话信息
     * @param messages 历史消息
     * @param content 当前用户消息内容
     * @param emitter SseEmitter 用于将数据块发送给客户端
     * @return 返回一个可用于后续操作的 AiChatMessage 对象 (例如保存到数据库，但内容可能不完整，需要后续填充)
     */
    AiChatMessage chatStream(AiChat chat, List<AiChatMessage> messages, String content, org.springframework.web.servlet.mvc.method.annotation.SseEmitter emitter);
}

/**
 * Token计算服务接口 - 负责token相关计算
 * 遵循接口隔离原则，将token计算功能分离
 */
interface TokenCalculationService {

    /**
     * 计算内容的token数量
     *
     * @param content 内容
     * @return token数量
     */
    int countTokens(String content);
}